﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Media.Imaging;

namespace Kuvankatselin.Objekti
{
    public class Kuva : Objekti
    {
        /// <summary>
        /// Kuvan piirtoalue
        /// </summary>
        Image kuva;

        /// <summary>
        /// Muodostin jos käytössä on tiedostonimi
        /// </summary>
        /// <param name="kuvaTiedosto">Kuvan tiedostonimi</param>
        public Kuva(string kuvaTiedosto)
        {
            kuva = new Image();
            this.tiedosto = kuvaTiedosto;
            // Luodaan kuvasta image
            PaivitaKuva();
            // Asetetaan kuva oikein
            Grid.SetColumn(this.kuva, 0);
            Grid.SetRow(this.kuva, 0);
            Grid.SetZIndex(this.kuva, 0);
            this.Children.Add(kuva);
        }

        /// <summary>
        /// Päivitetään kuvan koko
        /// </summary>
        private void PaivitaKuva()
        {
            BitmapImage _kuva = new BitmapImage();
            _kuva.BeginInit();
            _kuva.UriSource = new Uri(this.tiedosto);
            // Tarkistetaan onko objekti liian suuri esikatseluun niin koodataan oikeankokoiseksi
            if (this.esikatselu)
            {
                _kuva.DecodePixelHeight = Objekti.EsikatseluKorkeus;
            }
            _kuva.EndInit();

            // Tarkistetaan onko kuva muuten liian suuri
            if (_kuva.PixelWidth > Objekti.SuurinLeveys)
            {
                _kuva.DecodePixelWidth = Objekti.SuurinLeveys;
            }
            if (_kuva.PixelHeight > Objekti.SuurinKorkeus)
            {
                _kuva.DecodePixelHeight = Objekti.SuurinKorkeus;
            }

            // Asetetaan kuva kuva-alueeseen
            this.kuva.BeginInit();
            this.kuva.Source = _kuva;
            this.kuva.EndInit();
            // Tarkistetaan onko kuvan koko oikea samoin kuin objektin
            if (this.esikatselu)
            {
                this.Height = _kuva.PixelHeight;
                this.Width = _kuva.PixelWidth;
            }
            else
            {
                this.Height = (int)_kuva.PixelHeight * 0.5;
                this.Width = (int)_kuva.PixelWidth * 0.5;
            }

        }
    }
}
